package day13.mapdemo;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;
import java.util.function.BiConsumer;
//他没有索引，但是他能get（key）得到value

//map的遍历方式
public class demo2 {
    public static void main(String[] args) {

        int a[]={1,2,3};
        System.out.println(a.length);

        Map<String, String> map = new HashMap<>();
        map.put("001", "张三");
        map.put("002", "李四");
        map.put("003", "王五");

        Set<String> keyss=map.keySet();
        for(String key:keyss)
        {
            System.out.println(key+":"+map.get(key));//只要拿到了键就可以拿到value
        }

        //增强for
        //这个泛型才是Set容器操作的具体类型
        //把所有键值对放到set容器里面，只需要遍历set容器就行，数据类型是这个泛型（MAP接口中的Entrt接口）
        Set<Map.Entry<String,String>> set=map.entrySet();

        for(Map.Entry<String,String> it:set)
        {
            System.out.println(it.getKey() + ":" + it.getValue());
        }
            
        //lambda遍历，最简洁，底层还是把键值对放在了set里面

        map.forEach((key,value)->System.out.println(key+":"+value));//这个可以记一下
        //lambda表达式原型为
        map.forEach(new BiConsumer<String, String>() {
            @Override
            public void accept(String key2, String value2) {
                System.out.println(key2 + ":" + value2);
            }
        });//提供一个匿名内部类（子类）（他爹是接口）传给foreach方法中的action形参，然后内部去遍历每一个键值对，拿到了每一个键值对去调用我重写的accept方法
         // 并且把遍历得到的key和value传给accept方法中的形参

        //把键值放到set里面
        Set<String> keys=map.keySet();
        for(String key:keys)
        {
            System.out.println(key+":"+map.get(key));
        }

    }
}
